/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package treegen;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import javafx.scene.Group;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;

/**
 * Класс дерева,содержащий всю необходимую информацию. Занимается собственной отрисовкой.
 * @author Елена
 */
public class Tree {

    /** Графическое окно*/
    public TreeGen window;
    /** Ветви*/
    public ArrayList<Branch> branches = new ArrayList<Branch>();
    /** Стволы*/
    public ArrayList<Trunk> trunks = new ArrayList<Trunk>();
    /** Крона*/
    public Crown crown = new Crown();

    /**
     * Конструктор дерева
     * @param pane графическая панель
     */
    public Tree(TreeGen pane) {
        window = pane;
    }

    /**
     * Установить стволы
     * @return признак успеха
     */
    public boolean setTrunks() {
        boolean success = true;
        for (int i = 0; i < trunks.size() && success; i++) {
            success = window.trunkPanel.getValues(trunks.get(i));
        }
        return success;
    }

    /**
     * Нарисовать дерево
     * @return группа, представляющая собой изображение дерева
     */
    public Group paint() {
        int size;
        int left;
        int right;
        int top;
        int bottom;
        Group result = new Group();
        ArrayList<Integer> x = new ArrayList<>();
        ArrayList<Integer> y = new ArrayList<>();
        Random random = new Random();
        if ("Зонтичная".equals(Crown.TYPE) && trunks.get(0).height == 550) {
            ImageView view = new ImageView(new Image(Trunk.class.getResourceAsStream("pictures/palm.png")));
            view.setX(460);
            view.setY(80);
            view.setFitHeight(550);
            view.setFitWidth(490);

            result.getChildren().add(view);
            return result;
        }
        if (trunks.size() == 1 && trunks.get(0).isSet) {
            result.getChildren().add(trunks.get(0).paint(705, 600));
        } else {
            size = (int) (trunks.size() * trunks.get(0).getWidth());
            left = 705 - size / 2;
            right = 705 + size / 2;
            top = 600 - size;
            bottom = 600;

            for (Trunk trunk : trunks) {
                x.add(left + random.nextInt(size));
                y.add(bottom - random.nextInt(size));
            }
            Collections.sort(y);
            for (int i = 0; i < y.size(); i++) {
                result.getChildren().add(trunks.get(i).paint(x.get(i), y.get(i)));
            }
        }
        return result;
    }
}
